package logic

import (
	"reflect"

	"gitee.com/night-tc/gobige/common"
	"gitee.com/night-tc/gobige/dbmanager"
	"gitee.com/night-tc/gobige/logger"
	"gitee.com/night-tc/gobige/msgdef/protomsg"
)

type Data struct {
	Model     dbmanager.IDataBaseModel
	Columns   []string
	IsPartial bool
	debug     bool
}

// 设置数据到差量中去
func SetDataModel(md *Data, msgdata *protomsg.TableData) {
	vmd := reflect.ValueOf(md.Model).Elem()
	for k, v := range msgdata.Datas {
		f := vmd.FieldByName(k)
		if common.ArrayIndexof(md.Columns, k) == -1 {
			md.Columns = append(md.Columns, k)
		}
		dbmanager.UnPackMsgDataToField(f, v)
	}
	if md.debug {
		/*
			表示DB上没有这个数据
			目标只有Player数据会走这个逻辑，因为需要走单字段的打包方式
			如果不是那就会有问题了，需要提示
		*/
		if len(md.Columns) < vmd.NumField() {
			logger.Warnf("SetDataModel IsPartial=true %s colnum error %v", md.Model.KeyName(), msgdata.Datas)
		}
	}
}
